package com.ys.多线程.p7线程常用方法4线程合并合入;

import com.ys.多线程.p2创建线程实现Runnable接口.RabbitTask;
import com.ys.多线程.p2创建线程实现Runnable接口.TortoiseTask;

/**
 * 描述: p2合入线程
 *
 *  * 1 创建乌龟和兔子两个任务
 *  * 2 创建两个Thread线程对象，将任务注入线程
 *  * 3 调用Thread的start()方法启动线程
 *  * 打印结果：
 *  * main游戏开始
 *  * main游戏结束
 *  * 兔子ZZZZZZZZZZZZZZZZZZZZ
 *  * 兔子跑了2步
 *  * .......
 *  * 此时：主线程启动了乌龟线程和兔子线程就结束了，不会等到游戏结束才打印“main游戏结束”
 *  * 我们要想一种办法，将龟兔线程"合入"到主线程(main)中，也就是说游戏结束主线程才结束
 * @author CodeYang
 * @version 2021/1/5 0:51
 */
public class p2合入线程 {

    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName()+"游戏开始");
        RabbitTask rabbitTask = new RabbitTask();
        TortoiseTask tortoiseTask = new TortoiseTask();
        // 兔子线程
        Thread t1 = new Thread(rabbitTask);
        // 乌龟线程
        Thread t2 = new Thread(tortoiseTask);
        t1.start();
        t2.start();
        try {
            // 将乌龟线程和兔子线程“合入”到主线程中
            /**
             * 先执行：main游戏开始
             * 然后执行：龟兔赛跑
             * 最后执行：main游戏结束
             * 主线程会等待游戏结束再结束自己。
             * 注意：join()方法必须在 start()方法之后调用，否则无法合入
             */
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(Thread.currentThread().getName()+"游戏结束");
    }

    /**
     * E:\Java\jdk-1.8.0_251\bin\java.exe "-javaagent:E:\Program Files\JetBrains\IntelliJ IDEA 2020\lib\idea_rt.jar=52031:E:\Program Files\JetBrains\IntelliJ IDEA 2020\bin" -Dfile.encoding=UTF-8 -classpath E:\Java\jdk-1.8.0_251\jre\lib\charsets.jar;E:\Java\jdk-1.8.0_251\jre\lib\deploy.jar;E:\Java\jdk-1.8.0_251\jre\lib\ext\access-bridge-64.jar;E:\Java\jdk-1.8.0_251\jre\lib\ext\cldrdata.jar;E:\Java\jdk-1.8.0_251\jre\lib\ext\dnsns.jar;E:\Java\jdk-1.8.0_251\jre\lib\ext\jaccess.jar;E:\Java\jdk-1.8.0_251\jre\lib\ext\jfxrt.jar;E:\Java\jdk-1.8.0_251\jre\lib\ext\localedata.jar;E:\Java\jdk-1.8.0_251\jre\lib\ext\nashorn.jar;E:\Java\jdk-1.8.0_251\jre\lib\ext\sunec.jar;E:\Java\jdk-1.8.0_251\jre\lib\ext\sunjce_provider.jar;E:\Java\jdk-1.8.0_251\jre\lib\ext\sunmscapi.jar;E:\Java\jdk-1.8.0_251\jre\lib\ext\sunpkcs11.jar;E:\Java\jdk-1.8.0_251\jre\lib\ext\zipfs.jar;E:\Java\jdk-1.8.0_251\jre\lib\javaws.jar;E:\Java\jdk-1.8.0_251\jre\lib\jce.jar;E:\Java\jdk-1.8.0_251\jre\lib\jfr.jar;E:\Java\jdk-1.8.0_251\jre\lib\jfxswt.jar;E:\Java\jdk-1.8.0_251\jre\lib\jsse.jar;E:\Java\jdk-1.8.0_251\jre\lib\management-agent.jar;E:\Java\jdk-1.8.0_251\jre\lib\plugin.jar;E:\Java\jdk-1.8.0_251\jre\lib\resources.jar;E:\Java\jdk-1.8.0_251\jre\lib\rt.jar;F:\STX_WorkSpace\OwnCode\JAVASE\out\production\day_25 com.ys.多线程.p7线程常用方法4线程合并合入.p2合入线程
     * main游戏开始
     * 真假:false
     * 兔子ZZZZZZZZZZZZZZZZZZZZ
     * 真假:true
     * 兔子跑了2步
     * 真假:false
     * 兔子ZZZZZZZZZZZZZZZZZZZZ
     * 真假:true
     * 兔子跑了4步
     * 真假:true
     * 兔子跑了6步
     * 真假:false
     * 兔子ZZZZZZZZZZZZZZZZZZZZ
     * 真假:true
     * 兔子跑了8步
     * 真假:false
     * 兔子ZZZZZZZZZZZZZZZZZZZZ
     * 真假:true
     * 兔子跑了10步
     * 真假:true
     * 兔子跑了12步
     * 真假:true
     * 兔子跑了14步
     * 真假:false
     * 兔子ZZZZZZZZZZZZZZZZZZZZ
     * 真假:false
     * 兔子ZZZZZZZZZZZZZZZZZZZZ
     * 真假:false
     * 兔子ZZZZZZZZZZZZZZZZZZZZ
     * 真假:true
     * 兔子跑了16步
     * 真假:true
     * 兔子跑了18步
     * 真假:true
     * 兔子跑了20步
     * 乌龟跑了:1步
     * 乌龟跑了:2步
     * 乌龟跑了:3步
     * 乌龟跑了:4步
     * 乌龟跑了:5步
     * 乌龟跑了:6步
     * 乌龟跑了:7步
     * 乌龟跑了:8步
     * 乌龟跑了:9步
     * 乌龟跑了:10步
     * 乌龟跑了:11步
     * 乌龟跑了:12步
     * 乌龟跑了:13步
     * 乌龟跑了:14步
     * 乌龟跑了:15步
     * 乌龟跑了:16步
     * 乌龟跑了:17步
     * 乌龟跑了:18步
     * 乌龟跑了:19步
     * 乌龟跑了:20步
     * main游戏结束
     */
}
